package com.itxx.reflection;

import com.itxx.reflection.damain.Student;

import java.lang.reflect.Constructor;

public class ReflectionDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {

        /*获取class对象
                1. 源代码阶段   Class类中 forName(String className)全类名

                2. Class对象阶段  类名.Class

                3. RunTime阶段  利用对象的getCalss方法来获取Class对象
                //getclass()是定义在Object中的

        */

        /*获取Construtor对象
                1.Constructor<?>[] getConstructors​() 返回一个包含 Constructor对象的数组，
                 Constructor对象反映了由该 Class对象表示的类的所有公共构造函数。

                2.Constructor<T> getDeclaredConstructor​(Class<?>... parameterTypes)
                返回一个 Constructor对象，该对象反映由此 Class对象表示的类或接口的指定构造函数。

                3.Constructor<?>[] getDeclaredConstructors​()
                返回反映由该 Class对象表示的类声明的所有构造函数的 Constructor对象的数组。

                4.Constructor<T> getConstructor​(Class<?>... parameterTypes)
                返回一个 Constructor对象，该对象反映由该 Class对象表示的类的指定公共构造函数。

        */
        Class aClass = Class.forName("com.itxx.reflection.damain.Student");
        //1.getConstructors()   获取所有public构造
        Constructor<?>[] constructors = aClass.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        System.out.println("--------------");
        //2.Constructor<?>[] getDeclaredConstructors​()
        Constructor<?>[] constructors1 = aClass.getDeclaredConstructors();
        for (Constructor<?> constructor : constructors1) {
            System.out.println(constructor);
        }
        //3.Constructor<T> getConstructor​(Class<?>... parameterTypes)
        Constructor constructor = aClass.getConstructor(Student.class);
        System.out.println(constructor);
        System.out.println("-----------");
        //4.Constructor<T> getDeclaredConstructor​(Class<?>... parameterTypes)获取 任意修饰符的
        Constructor<?> constructor1 = aClass.getDeclaredConstructor(String.class, Integer.class);
        System.out.println(constructor1);

    }

}
